Apache Commons Collections লাইব্রেরি Java Collections Framework (JCF)-এর উপরে অতিরিক্ত ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস সরবরাহ করে। এর মধ্যে Buffer এবং Queue ডেটা স্ট্রাকচার গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি এমন ধরনের ডেটা স্ট্রাকচার যা ডেটা ইনপুট এবং আউটপুট প্রক্রিয়া নির্দিষ্টভাবে পরিচালনা করে।
Buffer এবং Queue দুটি সাধারণভাবে ব্যবহৃত FIFO (First In First Out) বা LIFO (Last In First Out) স্ট্রাকচার হতে পারে এবং তারা ডেটা প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহৃত হয়। এই গাইডে আমরা Buffer এবং Queue কিভাবে ব্যবহার করা হয় এবং তাদের বৈশিষ্ট্য সম্পর্কে আলোচনা করবো।
Buffer কোলেকশন ক্লাসগুলি মূলত ডেটা স্টোরেজের একটি স্থায়ী স্থান প্রদান করে যেখানে ডেটা ইনপুট এবং আউটপুট নিয়ন্ত্রণ করা হয়। এটি সাধারণত একটি ক্যাশ বা স্থায়ী স্টোরেজ হিসেবে কাজ করে যেখানে ডেটা সিকোয়েন্সিয়ালি ইনপুট এবং আউটপুট হয়।
Apache Commons Collections এ Buffer ডেটা স্ট্রাকচারের জন্য BlockingBuffer, CircularBuffer এবং Buffer কোলেকশন ক্লাস সরবরাহ করা হয়।
CircularBuffer হল একটি রিং-বাফার যা নির্দিষ্ট আকারের একটি সার্কুলার বাফারে ডেটা সংরক্ষণ করে। যখন বাফার পূর্ণ হয়ে যায় এবং নতুন আইটেম যোগ করা হয়, তখন পুরানো আইটেমগুলো রিপ্লেস করা হয়। এটি সিস্টেমের মধ্যে সীমিত সম্পদ ব্যবহার করে কার্যকরভাবে ডেটা ম্যানেজ করে।
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class BufferExample {
public static void main(String[] args) {
// Create a CircularBuffer with a capacity of 3
CircularFifoBuffer<String> buffer = new CircularFifoBuffer<>(3);
// Adding elements to the buffer
buffer.add("apple");
buffer.add("banana");
buffer.add("cherry");
// Buffer is full now, so adding another element will remove the first element
buffer.add("date");
// Display the buffer contents
System.out.println(buffer); // Output: [banana, cherry, date]
}
}
এখানে:
আউটপুট:
[banana, cherry, date]
এটি একটি রিং-বাফার হিসাবে কাজ করে, যেখানে নতুন ডেটা যোগ করার সাথে পুরোনো ডেটা রিপ্লেস হয়।
Queue হল একটি ডেটা স্ট্রাকচার যা FIFO (First In First Out) বা LIFO (Last In First Out) প্রক্রিয়া অনুসরণ করে ডেটা ম্যানেজমেন্ট করে। এটি সাধারণত ডেটা ইনপুট এবং আউটপুট করার জন্য ব্যবহৃত হয় যেখানে প্রথমে আসা আইটেম প্রথমে বের হয়ে যায়। এটি বেশিরভাগ ক্ষেত্রে producer-consumer প্যাটার্নে ব্যবহৃত হয়।
Apache Commons Collections লাইব্রেরিতে বিভিন্ন ধরনের Queue ক্লাস সরবরাহ করা হয়, যেমন PriorityQueue, QueueUtils, CircularQueue, ইত্যাদি।
CircularQueue হল একটি রিং-স্টাইলের কিউ যা একটি নির্দিষ্ট আকারের কিউতে ডেটা সংরক্ষণ করে। যখন কিউ পূর্ণ হয়ে যায় এবং নতুন আইটেম যোগ করা হয়, তখন পুরানো আইটেমগুলি রিপ্লেস হয়।
import org.apache.commons.collections4.queue.CircularFifoQueue;
public class QueueExample {
public static void main(String[] args) {
// Create a CircularQueue with a capacity of 3
CircularFifoQueue<String> queue = new CircularFifoQueue<>(3);
// Adding elements to the queue
queue.add("apple");
queue.add("banana");
queue.add("cherry");
// Queue is full now, so adding another element will remove the first element
queue.add("date");
// Display the queue contents
System.out.println(queue); // Output: [banana, cherry, date]
}
}
এখানে:
আউটপুট:
[banana, cherry, date]
এটি দেখায় কিভাবে Queue ব্যবহার করে ডেটা ইনপুট এবং আউটপুট প্রক্রিয়া পরিচালনা করা যায়।
PriorityQueue হল একটি কিউ যেখানে আইটেমগুলি একটি নির্দিষ্ট অর্ডারে (যেমন, প্রাধান্য বা মানের উপর ভিত্তি করে) সাজানো হয়। এটি একটি natural ordering বা Comparator এর মাধ্যমে কাজ করতে পারে।
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
// Create a PriorityQueue of integers
PriorityQueue<Integer> pq = new PriorityQueue<>();
// Adding elements to the priority queue
pq.add(10);
pq.add(5);
pq.add(20);
pq.add(15);
// Display the elements in the priority queue
while (!pq.isEmpty()) {
System.out.println(pq.poll()); // Output: 5, 10, 15, 20
}
}
}
এখানে:
আউটপুট:
5
10
15
20
এটি একটি প্রাধান্য ভিত্তিক কিউ, যেখানে আইটেমগুলো তাদের প্রাধান্য অনুযায়ী সাজানো হয়।
Apache Commons Collections এর Buffer এবং Queue ডেটা স্ট্রাকচারগুলি ডেটা ম্যানেজমেন্টের জন্য অত্যন্ত কার্যকরী এবং জনপ্রিয়। Buffer সাধারণত সিকোয়েন্সিয়াল ডেটা প্রবাহ নিয়ন্ত্রণের জন্য ব্যবহৃত হয় এবং Queue ডেটা ইনপুট ও আউটপুট প্রক্রিয়া পরিচালনা করে, যেমন FIFO বা LIFO প্যাটার্নে। CircularFifoQueue, CircularFifoBuffer, PriorityQueue এগুলি এই লাইব্রেরির মধ্যে প্রচলিত ক্লাস যা ডেটা প্রবাহ নিয়ন্ত্রণে সাহায্য করে এবং প্রোগ্রামিংয়ে আরো কার্যকরী ফিচার সরবরাহ করে।
Apache Commons Collections লাইব্রেরি Buffer ডাটা স্ট্রাকচার সরবরাহ করে, যা সাধারণত ফার্স্ট ইন ফার্স্ট আউট (FIFO) টাইপের কিউ হিসাবে ব্যবহৃত হয়। Buffer হলো একটি ডাটা স্টোরেজ, যেখানে উপাদানগুলি ধারাবাহিকভাবে অ্যাড করা হয় এবং সেগুলি ধারাবাহিকভাবে বের করা হয়। Queue বা Stack এর মতো ডাটা স্ট্রাকচারগুলোতে Buffer একইভাবে কাজ করে, তবে এটির মধ্যে বিশেষ কিছু বৈশিষ্ট্য এবং ব্যবহার রয়েছে, যা এটি আরও শক্তিশালী ও নমনীয় করে তোলে।
Buffer এর প্রধান বৈশিষ্ট্য হলো এটি একটি অস্থায়ী স্টোরেজ (temporary storage) হিসেবে কাজ করে এবং এর মাধ্যমে ডাটা আউটপুট এবং ইনপুট প্রক্রিয়া খুব সহজে পরিচালিত হয়।
Buffer হল একটি ডাটা স্ট্রাকচার যেখানে ডাটা আপলোড এবং ডাউনলোড করার সময় FIFO (First In First Out) পদ্ধতি অনুসরণ করা হয়। এটি মূলত ডাটা স্টোরেজ, যা প্রক্রিয়াজাতকরণ বা ট্রান্সফার হওয়া ডাটাকে সাময়িকভাবে সংরক্ষণ করে রাখে।
উদাহরণস্বরূপ, আপনি যখন কোনো প্রোগ্রামে ব্রডকাস্ট সিস্টেম বা ডাটা পাম্পিং করতে চান, তখন Buffer ব্যবহার করা যেতে পারে যাতে একের পর এক ডাটা পাঠানো বা গ্রহণ করা যায়।
এছাড়া, Apache Commons Collections লাইব্রেরি Buffer এর জন্য আরও কিছু ইন্টারফেস এবং ক্লাস প্রদান করে, যা বিশেষ কিছু ডাটা ম্যানেজমেন্ট এবং পারফরম্যান্স উন্নত করতে সাহায্য করে।
CircularBuffer একটি বিশেষ ধরনের FIFO Queue যেখানে স্টোরেজ এর সীমা শেষ হলে এটি আবার প্রথম থেকে ডাটা সংরক্ষণ করতে শুরু করে। অর্থাৎ, এর মধ্যে যত ডাটা থাকবে, তা চক্রাকারভাবে প্রবাহিত হবে। এটি এমন একটি ডাটা স্ট্রাকচার যেখানে Buffer overflow সমস্যা হবেনা এবং যে ডাটা প্রয়োজন হবে, তা overwrite হতে থাকবে।
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class CircularBufferExample {
public static void main(String[] args) {
// CircularBuffer with capacity of 3
CircularFifoBuffer<Integer> buffer = new CircularFifoBuffer<>(3);
buffer.add(1);
buffer.add(2);
buffer.add(3);
System.out.println(buffer); // Output: [1, 2, 3]
buffer.add(4); // Adds 4, causing 1 to be removed
System.out.println(buffer); // Output: [2, 3, 4]
buffer.add(5); // Adds 5, causing 2 to be removed
System.out.println(buffer); // Output: [3, 4, 5]
}
}
এখানে:
LinkedBuffer হল এমন একটি buffer যা linked list এর উপরে তৈরি হয়। এখানে ডাটা একেকটি নোড হিসেবে linked list-এ স্টোর করা হয়, এবং আপনি প্রতিটি নোড থেকে দ্রুত ডাটা অ্যাক্সেস করতে পারেন।
এই ধরনের বাফার খুবই উপকারী যখন আপনার প্রোজেক্টে দ্রুত ইনপুট এবং আউটপুট প্রক্রিয়া করতে হয় এবং তালিকা সাইজ পরিবর্তনশীল হয়।
import org.apache.commons.collections4.buffer.LinkedBuffer;
public class LinkedBufferExample {
public static void main(String[] args) {
// LinkedBuffer
LinkedBuffer<String> buffer = new LinkedBuffer<>();
buffer.add("apple");
buffer.add("banana");
buffer.add("cherry");
System.out.println(buffer); // Output: [apple, banana, cherry]
buffer.remove(); // Removes "apple"
System.out.println(buffer); // Output: [banana, cherry]
}
}
এখানে:
FixedBuffer একটি স্থির সাইজের buffer যা পূর্বনির্ধারিত সীমার মধ্যে ডাটা সংরক্ষণ করে। এটি সাধারণত এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে ডাটার আকার বা ক্যাপাসিটি প্রেডিক্টেবল এবং পরিবর্তনশীল নয়।
import org.apache.commons.collections4.buffer.FixedFifoBuffer;
public class FixedBufferExample {
public static void main(String[] args) {
// FixedBuffer with fixed capacity of 3
FixedFifoBuffer<String> buffer = new FixedFifoBuffer<>(3);
buffer.add("item1");
buffer.add("item2");
buffer.add("item3");
System.out.println(buffer); // Output: [item1, item2, item3]
buffer.add("item4"); // Causes the buffer to overflow
System.out.println(buffer); // Output: [item2, item3, item4]
}
}
এখানে:
Buffer Type | Description | Use Case |
---|---|---|
CircularBuffer | Fixed size, overwrites old data with new entries (FIFO). | For scenarios where data is cyclic or needs overwriting (e.g., ring buffers). |
LinkedBuffer | Based on linked list; allows dynamic size management. | For scenarios where the data size varies or needs to grow dynamically. |
FixedBuffer | A buffer with fixed capacity; no resizing is allowed. | For fixed-size collections where capacity is predictable and limited. |
Buffer এমন একটি ডাটা স্ট্রাকচার যা ডাটা প্রক্রিয়াকরণে ব্যবহৃত হয় এবং FIFO (First In First Out) পদ্ধতি অনুসরণ করে। Apache Commons Collections এ CircularBuffer, LinkedBuffer, এবং FixedBuffer এর মতো বিভিন্ন ধরনের বাফার সরবরাহ করা হয়েছে। আপনি thread-safe ডাটা স্টোরেজ, cyclic data handling, এবং fixed capacity buffers ব্যবহারের জন্য এই ক্লাসগুলো ব্যবহার করতে পারেন। Buffer এর সঠিক ব্যবহার আপনার ডাটা স্টোরেজ এবং ব্যবস্থাপনা পদ্ধতিকে আরও কার্যকরী এবং সুরক্ষিত করে তোলে।
Apache Commons Collections লাইব্রেরি একাধিক বিশেষ ধরনের ডেটা স্ট্রাকচার সরবরাহ করে, যেগুলি বিশেষ পরিস্থিতিতে কাজ করার জন্য তৈরি করা হয়। এই ডেটা স্ট্রাকচারগুলির মধ্যে BoundedBuffer
, CircularFifoBuffer
, এবং UnboundedFifoBuffer
উল্লেখযোগ্য। এগুলি মূলত FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে এবং এগুলোর ব্যবহারের ক্ষেত্রে আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী বাউন্ডেড (সীমাবদ্ধ) অথবা আনবাউন্ডেড (সীমাহীন) বাফার প্রয়োজন হতে পারে।
BoundedBuffer
একটি বাফার যা একটি নির্দিষ্ট আকারে সীমাবদ্ধ। এর মানে হল যে এটি একটি নির্দিষ্ট সীমা নির্ধারণ করে এবং যখন বাফার পূর্ণ হয়ে যায়, তখন নতুন উপাদান প্রবেশ করতে গেলে পুরনো উপাদানগুলো সরিয়ে ফেলা হয়। এটি সাধারণত producer-consumer প্যাটার্নে ব্যবহৃত হয় যেখানে একটি প্রোডিউসার (producer) উপাদান প্রদান করে এবং কনজিউমার (consumer) সেগুলি গ্রহণ করে।
import org.apache.commons.collections4.buffer.BoundedBuffer;
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class BoundedBufferExample {
public static void main(String[] args) {
// Create a BoundedBuffer of size 3
BoundedBuffer<String> buffer = new CircularFifoBuffer<>(3);
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// At this point, the buffer is full. Adding a new element will remove the oldest element
buffer.add("grape");
// Print the buffer contents
System.out.println("Buffer Contents: " + buffer);
}
}
Buffer Contents: [banana, orange, grape]
BoundedBuffer
এর আকার ৩ নির্ধারণ করা হয়েছে, এবং এর মধ্যে সর্বোচ্চ ৩টি উপাদান থাকতে পারে।grape
যোগ করা হয়, তখন apple
সরিয়ে ফেলা হয়, কারণ বাফার পূর্ণ হয়ে গেছে।CircularFifoBuffer
একটি বিশেষ ধরনের বাফার যা একটি সীমিত আকারে উপাদান ধারণ করে এবং FIFO (First-In, First-Out) পদ্ধতিতে কাজ করে। যখন বাফার পূর্ণ হয় এবং নতুন উপাদান যোগ করা হয়, তখন প্রথম যোগ করা উপাদানটি (oldest element) সরিয়ে ফেলা হয়। এটি একটি বাউন্ডেড বাফার, যেখানে ডেটা একটি circular queue এর মতো সঞ্চালিত হয়।
import org.apache.commons.collections4.buffer.CircularFifoBuffer;
public class CircularFifoBufferExample {
public static void main(String[] args) {
// Create a CircularFifoBuffer of size 3
CircularFifoBuffer<String> buffer = new CircularFifoBuffer<>(3);
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// At this point, the buffer is full. Adding a new element will remove the oldest element
buffer.add("grape");
// Print the buffer contents
System.out.println("CircularFifoBuffer Contents: " + buffer);
}
}
CircularFifoBuffer Contents: [banana, orange, grape]
CircularFifoBuffer
এর আকার ৩ নির্ধারণ করা হয়েছে এবং এতে সর্বোচ্চ ৩টি উপাদান থাকতে পারে।grape
যোগ করা হয়, তখন apple
সরিয়ে ফেলা হয়, কারণ এটি বাফারের সবচেয়ে পুরনো উপাদান।UnboundedFifoBuffer
একটি FIFO (First-In, First-Out) বাফার যা কোনও আকারের সীমা ছাড়াই উপাদান ধারণ করতে পারে। এর মানে হল যে এটি কোনও নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ নয় এবং ইনপুট হিসাবে যতটুকু ডেটা আসে তা সরাসরি গ্রহণ করে।
import org.apache.commons.collections4.buffer.UnboundedFifoBuffer;
public class UnboundedFifoBufferExample {
public static void main(String[] args) {
// Create an UnboundedFifoBuffer
UnboundedFifoBuffer<String> buffer = new UnboundedFifoBuffer<>();
// Add elements
buffer.add("apple");
buffer.add("banana");
buffer.add("orange");
// Adding more elements, no size limit
buffer.add("grape");
buffer.add("kiwi");
// Print the buffer contents
System.out.println("UnboundedFifoBuffer Contents: " + buffer);
}
}
UnboundedFifoBuffer Contents: [apple, banana, orange, grape, kiwi]
UnboundedFifoBuffer
আকারের কোনও সীমা ছাড়াই উপাদান ধারণ করতে পারে, এবং এটি FIFO পদ্ধতিতে কাজ করে।Feature | BoundedBuffer | CircularFifoBuffer | UnboundedFifoBuffer |
---|---|---|---|
Size Limit | Fixed size (bounded) | Fixed size (bounded) | No size limit (unbounded) |
Data Removal | Removes the oldest element when full | Removes the oldest element when full | No removal needed, grows dynamically |
FIFO | Yes, maintains first-in, first-out order | Yes, maintains first-in, first-out order | Yes, maintains first-in, first-out order |
Usage | Useful for fixed-size data buffer in producer-consumer models | Useful for scenarios where data is cyclic and old data is replaced | Useful for scenarios where the data buffer is unlimited |
Memory | Limited memory usage based on fixed size | Fixed memory usage based on buffer size | Dynamic memory usage based on data volume |
BoundedBuffer, CircularFifoBuffer, এবং UnboundedFifoBuffer হল FIFO (First-In, First-Out) বাফারগুলির বিভিন্ন ধরনের বাস্তবায়ন যা Apache Commons Collections লাইব্রেরি সরবরাহ করে।
এই বাফারগুলির মধ্যে পার্থক্য বুঝে আপনি আপনার প্রজেক্টের প্রয়োজন অনুযায়ী উপযুক্ত বাফার নির্বাচন করতে পারবেন।
Queue এবং Deque উভয়ই Java Collections Framework এর অংশ এবং তারা ডেটা স্ট্রাকচার হিসেবে ব্যবহার হয় যেখানে ডেটা প্রক্রিয়া করার জন্য একটি নির্দিষ্ট আদর্শ (order) অনুসরণ করা হয়। তবে, তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা তাদের ব্যবহারের ক্ষেত্রে প্রভাব ফেলে। এখানে আমরা Queue এবং Deque এর মধ্যে পার্থক্য এবং ব্যবহার আলোচনা করব।
Queue একটি ডেটা স্ট্রাকচার যা FIFO (First-In-First-Out) নিয়মে কাজ করে, অর্থাৎ প্রথমে যে উপাদানটি যুক্ত হয়, সেটি প্রথমে বের হয়। এটি একটি সাধারণ লাইন বা কিউ-এর মতো কাজ করে, যেমন লাইনে দাঁড়িয়ে থাকা। যখন একটি উপাদান কিউ থেকে বের করা হয়, তখন নতুন উপাদান সেটির স্থানে যোগ করা হয়।
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Create a Queue using LinkedList
Queue<String> queue = new LinkedList<>();
// Add elements to the queue
queue.add("apple");
queue.add("banana");
queue.add("orange");
// Remove elements from the queue (FIFO)
System.out.println(queue.poll()); // Output: apple
System.out.println(queue.poll()); // Output: banana
}
}
এখানে, প্রথমে "apple" যোগ করা হয়েছে এবং সেটি প্রথমে বের করা হয়েছে, এটি FIFO আদর্শ অনুসরণ করে।
Deque (যা "Double-Ended Queue" এর সংক্ষেপ) একটি ডেটা স্ট্রাকচার যা queue এর মতো কাজ করে তবে এতে দুটি শেষ (front এবং rear) থাকে। এটি উপাদান যুক্ত এবং সরানোর জন্য দুটি দিক থেকে কাজ করতে সক্ষম (যেমন, সামনে এবং পেছনে)। এর মানে হলো, আপনি FIFO বা LIFO (Last-In-First-Out) যে কোনো পদ্ধতি অনুসরণ করে উপাদান বের করতে পারেন, যা Queue থেকে আরও উন্নত।
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
// Create a Deque using ArrayDeque
Deque<String> deque = new ArrayDeque<>();
// Add elements to the front and rear
deque.addFirst("apple");
deque.addLast("banana");
deque.addFirst("orange");
// Remove elements from the front and rear
System.out.println(deque.pollFirst()); // Output: orange (FIFO)
System.out.println(deque.pollLast()); // Output: banana (LIFO)
}
}
এখানে, Deque ব্যবহার করে উপাদান দুটি দিক থেকে যোগ এবং সরানো হয়েছে। addFirst() এবং addLast() এর মাধ্যমে উপাদান যুক্ত করা হয়েছে, এবং pollFirst() এবং pollLast() এর মাধ্যমে উপাদান সরানো হয়েছে।
পয়েন্ট | Queue | Deque |
---|---|---|
অর্থ | Queue একটি সাধারণ একমুখী (FIFO) ডেটা স্ট্রাকচার। | Deque একটি ডাবল এন্ডেড কিউ, যা উভয় দিক থেকে উপাদান প্রক্রিয়া করতে সক্ষম। |
ডেটা প্রবাহ | FIFO পদ্ধতিতে উপাদান প্রবাহিত হয়। | FIFO বা LIFO উভয় পদ্ধতি অনুসরণ করতে পারে। |
অপারেশন | add(), remove(), peek() | addFirst(), addLast(), removeFirst(), removeLast() |
দিক | শুধুমাত্র একটি দিক থেকে উপাদান অ্যাক্সেস করা যায়। | উভয় দিক থেকে উপাদান অ্যাক্সেস এবং প্রক্রিয়া করা যায়। |
ব্যবহার | সাধারণ কিউ সিস্টেম (যেমন প্রিন্টার কিউ বা লাইনে দাঁড়ানো)। | কিউ এবং স্ট্যাক উভয়ের সুবিধা, যেমন ক্যাশে সিস্টেম বা Undo operations। |
প্রকার | সাধারণত Queue, PriorityQueue ব্যবহার হয়। | সাধারণত ArrayDeque, LinkedList ব্যবহার হয়। |
Queue এবং Deque উভয়ই জাভাতে ডেটা স্ট্রাকচার হিসেবে ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য হলো Queue একটি একমুখী ডেটা স্ট্রাকচার যা FIFO অনুসরণ করে, যেখানে উপাদানগুলো এক দিক থেকে প্রবাহিত হয়। অন্যদিকে, Deque একটি ডাবল এন্ডেড কিউ যা FIFO বা LIFO উভয় পদ্ধতিতে কাজ করতে সক্ষম এবং এটি উপাদানগুলোকে উভয় দিক থেকে অ্যাক্সেস এবং ম্যানিপুলেট করতে পারে।
Queue সাধারণত এমন কেসে ব্যবহার হয় যেখানে শুধুমাত্র একটি দিক থেকে উপাদান প্রবাহিত হয়, যেমন প্রিন্টার কিউ, যখন Deque ব্যবহার হয় যখন আপনাকে উভয় দিক থেকে উপাদান যুক্ত এবং সরাতে হয়, যেমন LRU Cache বা Undo/Redo operations।
Apache Commons Collections একটি শক্তিশালী লাইব্রেরি যা Java-তে বিভিন্ন ধরনের ডেটা স্ট্রাকচার এবং ইউটিলিটি ক্লাস প্রদান করে। এর মধ্যে একটি গুরুত্বপূর্ণ ক্লাস হল BufferUtils, যা বিভিন্ন ধরনের buffer সংক্রান্ত কার্যকলাপ সহজতর করে।
BufferUtils হল একটি ইউটিলিটি ক্লাস যা ByteBuffer, CharBuffer, IntBuffer, ইত্যাদি NIO Buffers এর সাথে কাজ করার জন্য বিভিন্ন helper methods সরবরাহ করে। এই ক্লাসটি ফাইল বা নেটওয়ার্ক I/O অপারেশন চালানোর সময় buffers ব্যবহার করার সময় প্রচলিত কিছু সাধারণ কার্যকলাপ সহজ করে দেয়।
BufferUtils মূলত Apache Commons Collections লাইব্রেরির একটি ক্লাস যা Java NIO Buffers এর উপর কাজ করে। এটি Buffer সংক্রান্ত বিভিন্ন ইউটিলিটি মেথড সরবরাহ করে, যেমন Buffer তৈরি করা, clear করা, flip করা, read/write অপারেশন করা ইত্যাদি।
BufferUtils ক্লাসের মাধ্যমে আপনি নিচের ধরনের কার্যকলাপ খুব সহজে করতে পারবেন:
এটি একটি Buffer কে byte array এ রূপান্তর করতে ব্যবহৃত হয়।
import org.apache.commons.collections4.buffer.BufferUtils;
import java.nio.ByteBuffer;
public class BufferUtilsExample {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 1);
buffer.put((byte) 2);
// Buffer কে byte array তে রূপান্তর করা
byte[] byteArray = BufferUtils.toByteArray(buffer);
// byte array প্রিন্ট করা
System.out.println("Byte Array: ");
for (byte b : byteArray) {
System.out.print(b + " ");
}
}
}
আউটপুট:
Byte Array: 1 2 0 0 0 0 0 0 0 0
এখানে:
toByteArray(buffer)
মেথডটি ByteBuffer কে byte array তে রূপান্তর করেছে।এই মেথডটি byte array কে ByteBuffer তে রূপান্তর করতে ব্যবহৃত হয়।
import org.apache.commons.collections4.buffer.BufferUtils;
import java.nio.ByteBuffer;
public class BufferUtilsExample {
public static void main(String[] args) {
byte[] byteArray = {1, 2, 3, 4};
// byte array কে ByteBuffer তে রূপান্তর করা
ByteBuffer buffer = BufferUtils.toByteBuffer(byteArray);
// ByteBuffer প্রিন্ট করা
while (buffer.hasRemaining()) {
System.out.print(buffer.get() + " ");
}
}
}
আউটপুট:
1 2 3 4
এখানে:
toByteBuffer(byteArray)
মেথডটি byte array কে ByteBuffer তে রূপান্তর করেছে।এই ফাংশনটি ByteBuffer থেকে byte array বের করতে ব্যবহৃত হয়।
import org.apache.commons.collections4.buffer.BufferUtils;
import java.nio.ByteBuffer;
public class BufferUtilsExample {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 10);
buffer.put((byte) 20);
// ByteBuffer থেকে byte array বের করা
byte[] byteArray = BufferUtils.getBytes(buffer);
// byte array প্রিন্ট করা
for (byte b : byteArray) {
System.out.print(b + " ");
}
}
}
আউটপুট:
10 20 0 0 0 0 0 0 0 0
এখানে:
getBytes(buffer)
মেথডটি ByteBuffer থেকে byte array বের করে নিয়ে এসেছে।এই ফাংশনটি একটি Buffer খালি কিনা তা চেক করে। যদি Buffer তে কোনো উপাদান না থাকে, তবে এটি true
রিটার্ন করবে।
import org.apache.commons.collections4.buffer.BufferUtils;
import java.nio.ByteBuffer;
public class BufferUtilsExample {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
// Buffer খালি কিনা তা যাচাই করা
boolean isEmpty = BufferUtils.isEmpty(buffer);
System.out.println("Is buffer empty? " + isEmpty);
}
}
আউটপুট:
Is buffer empty? true
এখানে:
isEmpty(buffer)
মেথডটি চেক করেছে যে buffer খালি কিনা।এই ফাংশনটি Buffer কে ক্লিয়ার করে, অর্থাৎ সেটির পজিশনকে শূন্যে সেট করে এবং তা নতুন ডেটা গ্রহণ করতে প্রস্তুত করে।
import org.apache.commons.collections4.buffer.BufferUtils;
import java.nio.ByteBuffer;
public class BufferUtilsExample {
public static void main(String[] args) {
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put((byte) 50);
// Buffer ক্লিয়ার করা
BufferUtils.clear(buffer);
System.out.println("Buffer after clear: " + buffer);
}
}
আউটপুট:
Buffer after clear: java.nio.HeapByteBuffer[pos=0 lim=10 cap=10]
এখানে:
clear(buffer)
মেথডটি ByteBuffer কে ক্লিয়ার করেছে, এবং পজিশন শূন্যে সেট করেছে।Apache Commons Collections এর BufferUtils ক্লাস আরও কিছু ইউটিলিটি ফাংশন সরবরাহ করে যেমন:
common.read_more